Шаблонный проект (m2-plugins-workspace.zip) представляет собой преднастроенную среду для разработки расширений с примерами реализации точек расширения. Это настроенное рабочее пространство (workspace) Angular-CLI, включающее в себя:
В настоящий момент имеются следующие шаблонные проекты:
m2-buttons-plugin - пример реализации точек расширения типа "Кнопка на панели"
m2-ref-book-plugin - пример реализации точки расширения типа "Представление справочника"
Чтобы начать работу, необходимо распаковать архив с шаблонным проектом и в корневом каталоге проекта выполнить команду:
npm install
После инициализации проекта можно собрать расширение с демонстрационной реализацией точек расширения. Для этого необходимо выполнить команду:
npm run build:
где m2-XXX-plugin - наименование подпроекта демонстрационного расширения, например, m2-buttons-plugin или m2-ref-book-plugin.
Дистрибутив расширения будет сгенерирован в директории dist/.
При разработке расширений могут быть использованы сервисы, утилиты и визуальные компоненты платформы из библиотек m2-core, m2-components, включенных в шаблонный проект. Описание этих библиотек поставляется в виде отдельного веб-приложения sdi-web-client-docs.war, которое можно развернуть на сервере приложений WildFly рядом с остальными модулями Sematic MDM, после чего оно станет доступно по ссылке вида http(s)://<адрес_сервера>/sdi-web-client-docs/documentation.
Примеры использования компонентов и ключевых сервисов платформы реализованы в виде встроенного расширения, которое может быть включено штатным образом через пользовательский интерфейс системы (Настройки - Расширения - Встроенные расширения клиента - Описание компонентов), после чего в главном навигационном меню системы появится раздел "Описание компонентов".
В шаблонном проекте также представлен исходный код базового примера расширения с реализацией нестандартной формы заявки.
Шаблонный проект **m2-buttons-**plugin демонстрирует возможность добавления кнопок в панели инструментов над деревом, таблицей и топ-фрейм меню как в справочниках, так и в классификаторах.
Ключевым классом расширения является M2ButtonsPluginModule, в аннотации @M2Plugin которого объявлены точки расширения типа PanelBtnExtensionPoint, каждая из которых добавляет кнопку в панель, определяемую параметром panel.
Определение точки расширения типа “Кнопка на панели“ предполагает объявление класса-фабрики, используемого базовым приложением для создания кнопки. Несколько кнопок могут быть объявлены с указанием одного и того же класса-фабрики, что позволяет, например, не дублировать его, если в панель инструментов над таблицей в справочнике и классификаторе требуется кнопка, реализующая одну и ту же логику. В шаблонном проекте классом-фабрикой является класс PlainActionBtnFactoryService, реализующий интерфейс PanelBtnFactory. В обработчике нажатия кнопки продемонстрирован пример использования глобальных сервисов базового приложения: сервиса логирования и сервиса уведомлений.
Класс-фабрика BtnWithTemplateFactoryService демонстрирует, как по клику на кнопку реализовать отображение подменю. Нужно обратить внимание на то, что компонент, используемый в качестве подменю (BtnTemplateComponent), должен быть объявлен в поле entryComponentsв аннотации @NgModule() модуля расширения.
Шаблонный проект m2-ref-book-plugin демонстрирует пример расширения, предоставляющего альтернативную реализацию представления справочника.
Ключевым классом расширения является M2RefBookPluginModule, в аннотации @M2Plugin которого объявлена точка расширения типа RouterExtensionPoint. Точка расширения добавляет в базовое приложение корневой модуль, управляемый стандартных маршрутизатором Angular, и доступный по пути /demoPluginRefBook, что определяется параметром routerLink.
Необходимо обратить внимание на то, что для модуля, указываемого в качестве реализации справочника в параметре moduleType, должна быть задана конфигурация маршрутизатора с указанием корневого компонента:
RouterModule.forChild([{
path: '', pathMatch: 'full', component: M2RefBookPluginComponent
}])
Указанный компонент M2RefBookPluginComponent и будет являться представлением справочника.